# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：HelloWorld
#   文件名：9.07项目实战之高并发拷贝.py
# 开发时间：2021/4/27 21:49
import multiprocessing
import os
from time import *


def copy_work(file_name, source_dir, target_dir):
    pass
    # 1.拼接源文件路径和目标文件路径 source_dir + '/' + file_name
    source_path = source_dir + '/' + file_name
    target_path = target_dir + '/' + file_name
    # 2.打开源文件和目标文件  with open obj.read()
    with open(source_path, 'rb') as source_file:
        with open(target_path, 'wb') as target_file:
            # 3.循环读取源文件到目标路径 with open obj.write()
            while True:
                data = source_file.read(1024)
                if data:
                    target_file.write(data)
                else:
                    break


if __name__ == '__main__':
    begin_time = time()  # 记录开始执行的时间

    # 1.定义源文件目录和目标文件夹的目录
    source_dir = r'D:\BaiduNetdiskDownload\video\神曲ppap抒情版尤克里里弹唱'
    target_dir = r'D:\BaiduNetdiskDownload\video\高并发拷贝目标文件夹'

    # 2.创建目标文件夹
    try:
        os.mkdir(target_dir)
        print('新建目标文件夹！')
    except Exception as e:
        print('找到目标文件夹!')

    # 3.列表变量通过os.listdir获取源文件中的文件
    file_list = os.listdir(source_dir)
    print(file_list)

    # 4.for循环，一次拷贝一个文件，多个同时进行
    for file_name in file_list:
        # 5.使用多进程，实现多任务
        sub_process = multiprocessing.Process(target=copy_work,
                                              args=(file_name, source_dir, target_dir))
        sub_process.start()  # 启动进程拷贝文件

    end_time = time()  # 记录结束执行的时间
    run_time = end_time - begin_time
    print(f'运行耗时{run_time}秒')
    # 运行耗时0.8450353145599365秒
